Численные методы¶
При возникновении вопросов пишите в телеграме, @olga_dmit.
Построение графиков.¶
Считывание данных¶
Открываем файл на чтение:
f = open('data.txt', 'r')
# 'r' 'w'
Считываем данные из файла построчно:
# [i^2 for i in range(5)]
# data = [list(map(float, line.split('\t'))) for line in f] # way 1
data = [ [float(val) for val in line.split('\t')] for line in f] # way 2
data
[[0.0, 5.0, 15.0], [1.0, 5.0379023818155595, 15.012551745856086], [2.0, 5.149816360205394, 15.050108011803358], [3.0, 5.330435729181175, 15.112372468278815], [4.0, 5.571158466330375, 15.19885318060056], [5.0, 5.860439984239704, 15.308865520098932], [6.0, 6.1842695462174655, 15.44153621824764], [7.0, 6.52675245429835, 15.595808542469287], [8.0, 6.870776684209769, 15.770448566377443], [9.0, 7.198739438591197, 15.964052501439287], [10.0, 7.493306728164471, 16.175055051427783], [11.0, 7.7381776549669725, 16.401738745607783], [12.0, 7.91882461589501, 16.642244201393463], [13.0, 8.023181190014606, 16.89458126225095], [14.0, 8.042251007547662, 17.156640951924345], [15.0, 7.970613377354012, 17.42620818165939], [16.0, 7.806804796679389, 17.70097514300829], [17.0, 7.553559576180595, 17.97855531504293], [18.0, 7.2178975529840965, 18.2564980114001], [19.0, 6.81105208108265, 18.53230338954923], [20.0, 6.348237010971764, 18.80343784202588], [21.0, 5.848257016696735, 19.067349687126466], [22.0, 5.332971210260956, 19.321485074723185], [23.0, 4.826625312755213, 19.563304021442846], [24.0, 4.355072547096585, 19.790296488467014], [25.0, 3.9449077097135055, 19.999998414659174], [26.0, 3.6225424165737667, 20.190007617611492], [27.0, 3.4132521742708573, 20.35799947553052], [28.0, 3.34022759842847, 20.501742303647497], [29.0, 3.4236627192759954, 20.619112340042], [30.0, 3.6799128411511832, 20.70810825740297], [31.0, 4.120752857144408, 20.766865119311554], [32.0, 4.752764295786009, 20.793667702107264], [33.0, 5.5768757620249705, 20.78696310628125], [34.0, 6.5880769311608045, 20.74537258461553], [35.0, 7.775320993410967, 20.66770251794015], [36.0, 9.121624586273509, 20.552954473393996], [37.0, 10.604367971239878, 20.40033428443243], [38.0, 12.19579170637215, 20.2092600965042], [39.0, 13.863679542612386, 19.979369327301107], [40.0, 15.57221093906737, 19.710524495742362], [41.0, 17.282960657754323, 19.402817879367415], [42.0, 18.956017558893425, 19.056574965550297], [43.0, 20.5511901555723, 18.67235666788798], [44.0, 22.029262861614686, 18.250960285227098], [45.0, 23.353264311897924, 17.793419187048375], [46.0, 24.48970775176293, 17.301001215296587], [47.0, 25.40976334793359, 16.775205799195398], [48.0, 26.090323396109227, 16.21775978609021], [49.0, 26.514923779477957, 15.630611997886442], [50.0, 26.674488617689548, 15.015926529164869], [51.0, 26.567869748669395, 14.376074809526958], [52.0, 26.202158381036252, 13.713626459121576], [53.0, 25.592752784757778, 13.031338972597162], [54.0, 24.763173065338698, 12.332146272881221], [55.0, 23.744621682261315, 11.619146182179879], [56.0, 22.57529619835306, 10.895586863386038], [57.0, 21.299468545527446, 10.164852290655222], [58.0, 19.966352622884475, 9.430446813226716], [59.0, 18.62878906842581, 8.695978881606123], [60.0, 17.341782339941133, 7.965144009959671], [61.0, 16.160930596671175, 7.24170705297454], [62.0, 15.140793108922534, 6.529483879492155], [63.0, 14.333242886655558, 5.832322528899672], [64.0, 13.785853795057864, 5.154083939550784], [65.0, 13.540371540274574, 4.49862234136126], [66.0, 13.631316529915221, 3.869765407172231], [67.0, 14.084763753542884, 3.2712942594807863], [68.0, 14.917340545990395, 2.706923430690356], [69.0, 16.13547749298049, 2.180280876123792], [70.0, 17.73494095774358, 1.6948881396607334], [71.0, 19.70066793070718, 1.254140772003458], [72.0, 22.006915346580577, 0.8612891012370731], [73.0, 24.617726916177695, 0.5194194545307163], [74.0, 27.487711146388712, 0.23143592852632366], [75.0, 30.56311484592496, 4.280418422908383e-05], [76.0, 33.783167316731685, -0.17227230039418018], [77.0, 37.081661887694004, -0.28325444835968483], [78.0, 40.38873372306162, -0.3308964860845087], [79.0, 43.63278617761415, -0.3134531446773714], [80.0, 46.74251259122658, -0.22945406105097277], [81.0, 49.64895650004202, -0.07771564299765998], [82.0, 52.287550932440396, 0.14264829242921984], [83.0, 54.60007685271875, 0.43221717271539717], [84.0, 56.536481962391825, 0.7912556757883635], [85.0, 58.056503965804644, 1.2197071420502965], [86.0, 59.13104699914165, 1.717188440373942], [87.0, 59.743266104830646, 2.2829863294243307], [88.0, 59.88932225309672, 2.9160553489525363], [89.0, 59.57877927054023, 3.615017268775656], [90.0, 58.83462389396409, 4.378162116037641], [91.0, 57.69290075488642, 5.203450794074184], [92.0, 56.20196511909548, 6.088519298810365], [93.0, 54.421367341640085, 7.0306845311399], [94.0, 52.420393927730515, 8.026951696199667], [95.0, 50.27630049193277, 9.074023272901215], [96.0, 48.072281469867484, 10.1683095295434], [97.0, 45.89522986603183, 11.305940553845183], [98.0, 43.833347354431126, 12.48277975833859], [99.0, 41.973670458040004, 13.694438814782592]]
Функция split разбивает строку на несколько строк по указанному символу:
s = '123 45 6'
s.split(' ')
['123', '45', '6']
s = '12a212a356a7'
s.split('a')
['12', '212', '356', '7']
В файле в каждой строке записано три числа: время, координата x и координата y.
Собираем в отдельный список все времена:
t = []
for i in range(len(data)):
t.append(data[i][0])
t
[0.0, 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0, 13.0, 14.0, 15.0, 16.0, 17.0, 18.0, 19.0, 20.0, 21.0, 22.0, 23.0, 24.0, 25.0, 26.0, 27.0, 28.0, 29.0, 30.0, 31.0, 32.0, 33.0, 34.0, 35.0, 36.0, 37.0, 38.0, 39.0, 40.0, 41.0, 42.0, 43.0, 44.0, 45.0, 46.0, 47.0, 48.0, 49.0, 50.0, 51.0, 52.0, 53.0, 54.0, 55.0, 56.0, 57.0, 58.0, 59.0, 60.0, 61.0, 62.0, 63.0, 64.0, 65.0, 66.0, 67.0, 68.0, 69.0, 70.0, 71.0, 72.0, 73.0, 74.0, 75.0, 76.0, 77.0, 78.0, 79.0, 80.0, 81.0, 82.0, 83.0, 84.0, 85.0, 86.0, 87.0, 88.0, 89.0, 90.0, 91.0, 92.0, 93.0, 94.0, 95.0, 96.0, 97.0, 98.0, 99.0]
Собираем в отдельный список все x:
x = []
for i in range(len(data)):
x.append(data[i][1])
x
[0.0, 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0, 13.0, 14.0, 15.0, 16.0, 17.0, 18.0, 19.0, 20.0, 21.0, 22.0, 23.0, 24.0, 25.0, 26.0, 27.0, 28.0, 29.0, 30.0, 31.0, 32.0, 33.0, 34.0, 35.0, 36.0, 37.0, 38.0, 39.0, 40.0, 41.0, 42.0, 43.0, 44.0, 45.0, 46.0, 47.0, 48.0, 49.0, 50.0, 51.0, 52.0, 53.0, 54.0, 55.0, 56.0, 57.0, 58.0, 59.0, 60.0, 61.0, 62.0, 63.0, 64.0, 65.0, 66.0, 67.0, 68.0, 69.0, 70.0, 71.0, 72.0, 73.0, 74.0, 75.0, 76.0, 77.0, 78.0, 79.0, 80.0, 81.0, 82.0, 83.0, 84.0, 85.0, 86.0, 87.0, 88.0, 89.0, 90.0, 91.0, 92.0, 93.0, 94.0, 95.0, 96.0, 97.0, 98.0, 99.0]
Собираем в отдельный список все y:
y = []
for i in range(len(data)):
y.append(data[i][2])
y
[15.0, 15.012551745856086, 15.050108011803358, 15.112372468278815, 15.19885318060056, 15.308865520098932, 15.44153621824764, 15.595808542469287, 15.770448566377443, 15.964052501439287, 16.175055051427783, 16.401738745607783, 16.642244201393463, 16.89458126225095, 17.156640951924345, 17.42620818165939, 17.70097514300829, 17.97855531504293, 18.2564980114001, 18.53230338954923, 18.80343784202588, 19.067349687126466, 19.321485074723185, 19.563304021442846, 19.790296488467014, 19.999998414659174, 20.190007617611492, 20.35799947553052, 20.501742303647497, 20.619112340042, 20.70810825740297, 20.766865119311554, 20.793667702107264, 20.78696310628125, 20.74537258461553, 20.66770251794015, 20.552954473393996, 20.40033428443243, 20.2092600965042, 19.979369327301107, 19.710524495742362, 19.402817879367415, 19.056574965550297, 18.67235666788798, 18.250960285227098, 17.793419187048375, 17.301001215296587, 16.775205799195398, 16.21775978609021, 15.630611997886442, 15.015926529164869, 14.376074809526958, 13.713626459121576, 13.031338972597162, 12.332146272881221, 11.619146182179879, 10.895586863386038, 10.164852290655222, 9.430446813226716, 8.695978881606123, 7.965144009959671, 7.24170705297454, 6.529483879492155, 5.832322528899672, 5.154083939550784, 4.49862234136126, 3.869765407172231, 3.2712942594807863, 2.706923430690356, 2.180280876123792, 1.6948881396607334, 1.254140772003458, 0.8612891012370731, 0.5194194545307163, 0.23143592852632366, 4.280418422908383e-05, -0.17227230039418018, -0.28325444835968483, -0.3308964860845087, -0.3134531446773714, -0.22945406105097277, -0.07771564299765998, 0.14264829242921984, 0.43221717271539717, 0.7912556757883635, 1.2197071420502965, 1.717188440373942, 2.2829863294243307, 2.9160553489525363, 3.615017268775656, 4.378162116037641, 5.203450794074184, 6.088519298810365, 7.0306845311399, 8.026951696199667, 9.074023272901215, 10.1683095295434, 11.305940553845183, 12.48277975833859, 13.694438814782592]
Построение простых графиков¶
import matplotlib.pyplot as plt
plt.plot(t,x)
plt.show() # is needed to see figure while using command line or IDE
Управление внешним видом линии/точек¶
plt.subplots(figsize=(4, 3))
plt.plot(t[1::10], y[1::10], 'o--g')
# plt.plot(t, y, 'o:g')
plt.show()
plt.subplots(figsize=(4, 3))
plt.plot(x, y, 'r-')
plt.show()
plt.subplots(figsize=(4, 3))
plt.plot(t[1::10], y[1::10], color=[1, 0.5, 0.2], marker='s', linestyle='dashed',
linewidth=2, markersize=10)
plt.show()
Легенда¶
plt.subplots(figsize=(4, 3))
plt.plot(t, x, 'b-', label='x(t)')
plt.plot(t, y, '-r', label='y(t)')
plt.legend()
plt.show()
Управление полем графика и осями¶
fig, ax = plt.subplots(figsize=(4, 3))
plt.plot(t, x, 'ob', label='x(t)')
plt.plot(t, y, 'ob', label='y(t)')
ax.set(title='Trajectory',
xlabel='X coorfinates, meters', ylabel='Y coordinate, meters')
# xlim = (-10,110), ylim=(-5,40))
plt.grid(1)
# plt.title('Center Title')
# plt.title('Left Title', loc='left')
# plt.title('Right Title', loc='right')
plt.legend()
plt.show()
Несколько графиков на одном рисунке¶
fig, (ax1, ax2) = plt.subplots(2,1,figsize=(3, 4))
ax1.plot(t,x, '+b')
ax2.plot(t,y, '*r')
ax1.set(title='x(t)', xlabel='t, s', ylabel='x, m')
ax2.set(title='y(t)', xlabel='t, s', ylabel='y, m')
plt.show()
fig, ax = plt.subplots(2,3)
# ax[1,1].plot(x**2,y)
# ax[0,2].plot(t,x)
# ax[0,0].plot(x,y)
# ax[1,2].plot(x,y)
ax[0,0].plot(t,x)
ax[0,1].plot(t,y)
ax[0,2].plot(x,y)
ax[1,2].plot(x,y)
plt.show()
fig = plt.figure(figsize=(8, 6))
ax1 = plt.subplot2grid((2,3), (0,0), colspan=3)
# ax2 = plt.subplot2grid((2,3), (0,1), colspan=2)
# ax3 = plt.subplot2grid((2,3), (1,1))
ax4 = plt.subplot2grid((2,3), (1,2))
ax1.plot(x,y)
ax4.plot(x,y)
ax4.set(title = "T")
plt.show()
Задание¶
Пользуясь данными из файла, построить следующие графики. На каждом графике подписать оси, указав единицы измерения (координаты в метрах, времена в секундах).
На одном графике построить зависимости x(t) и y(t): x - пунктирной линией зелёного цвета, y - штрих-пунктирной линией оранжевого цвета. Добавить легенду.
Добавить на график сетку из пунктирных линий серого цвета.
Построить график траектории движения x(t) точками, не соединёнными линией.
Построить на одном рисунке два графика друг под другом: x(t) и y(t).
Построить на одном рисунке три графика: x(t), y(t), y(x) - первые два в первой строчке, второй под ними во всю ширину. Для всех трёх графиков задать заголовки.